package com.cxy.service;

import com.cxy.dto.*;
import com.cxy.entity.User;
import com.cxy.result.PageResult;
import com.cxy.vo.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.util.List;

public interface UserService {
    /**
     * 用户登录
     * @param userLoginDTO
     * @return
     */
    User login(UserLoginDTO userLoginDTO);

    /**
     * 党员分页查询
     * @param pageDTO
     * @return
     */
    PageResult page(PageDTO pageDTO);

    /**
     * 新增用户
     * @param userDTO
     */
    void saveUser(UserDTO userDTO);

    /**
     * 根据id查询党员信息
     * @param id
     * @return
     */
    UserVO getById(Long id);

    /**
     * 修改党员基本信息
     * @param messageDTO
     */
    void update(AllMessageDTO messageDTO);

    /**
     * 修改密码
     * @param id
     */
    void updatePassword(Long id);

    /**
     * 导出用户模板信息
     * @param response
     */
    void export(HttpServletResponse response, HttpServletRequest request) throws IOException;

    /**
     * 数据导入
     * @param file
     */
    void dataImport(MultipartFile file) throws IOException;

    /**
     * 删除用户
     * @param ids
     */
    void delete(List<Long> ids);

    /**
     * 查询全部
     * @return
     */
    List<UserVO> select();

    /**
     * 发送验证码
     */
    void sendEmailCode(String email);

    /**
     * 输入验证码和修改密码
     * @param updatePassWordDTO
     */
    void reset(UpdatePassWordDTO updatePassWordDTO);

    /**
     * 用户端修改密码
     * @param updatePassWordDTO
     */
    void userUpdatePassWord(UpdatePassWordDTO updatePassWordDTO);

    /**
     * 查看当前用户的评议·任务
     * @return
     */
    SeeAssessVO seeAssess();

    /**
     * 用户评议
     */
    UserAssessVO assess(Long id);
    /**
     * 用户评议打分
     */
    void mark(Long byReviewUserId,Double score);
    /**
     * 查看自身的评议记录
     */
    List<AssessRecordVO> seeAssessRecord(String dateNumber);

    /**
     * 返回月榜（月榜默认显示最新生成的期数的榜单。）
     * @return
     */
    MonthTopVO month();
    /**
     * 返回季度榜(首页的季度榜”默认显示的是距离当前上一个季度的榜单)
     * @return
     */
    QuarterTopVO quarter();
    /**
     * 往期榜单(月查询)
     */
    MonthTopVO ageMonthTop(String YearAndMonth) throws ParseException;
    /**
     * 往期榜单（季查询）
     */
    QuarterTopVO ageQuarterTop(String year, String season);
}
